
local 系统类_消息框 = class()
local bw = require("gge包围盒")(0,0,19,19)
local bw1 = require("gge包围盒")(0,0,19,21)
local bw2 = require("gge包围盒")(0,0,12,12)
local bw3 = require("gge包围盒")(0,0,30,26)
local w = 405
local h = 127 - 32
local x = 0
local y = 435 + 32
local y1 = y
local xx,yy,yyy = 0,0,0
local tp
local floor  = math.floor
local mousea = 引擎.鼠标按下
local mouseb = 引擎.鼠标弹起
local keyb   = 引擎.按键按下
local format = string.format

function 系统类_消息框:初始化(根)
  local 资源 = 根.资源
  local 按钮 = 根._按钮
  self.丰富文本 =  require("script/系统类/丰富文本")(410,h)
  :添加元素("xt",资源:载入('JM.FT',"网易WDF动画",0x43700E25))
  :添加元素("sj",资源:载入('JM.FT',"网易WDF动画",0x1B1DCE56))
  :添加元素("私聊@@",资源:载入('JM.FT',"网易WDF动画",0xF9ADC3DA))
  :添加元素("dw",资源:载入('JM.FT',"网易WDF动画",0xF9858C95))
  :添加元素("dy",资源:载入('JM.FT',"网易WDF动画",0xFC41B9B4))
  :添加元素("ps",资源:载入('JM.FT',"网易WDF动画",0xF0F8CF29))
  :添加元素("hs",资源:载入('JM.FT',"网易WDF动画",0x0902DAF6))
  :添加元素("lg",资源:载入('JM.FT',"网易WDF动画",0x212E3A85))
  :添加元素("wz",资源:载入('JM.FT',"网易WDF动画",0x2535CF6D))
  :添加元素("活动@@",资源:载入('JM.FT',"网易WDF动画",0x285527E7))
  :添加元素("夫妻@@",资源:载入('JM.FT',"网易WDF动画",0x29F78369))
  :添加元素("经济@@",资源:载入('JM.FT',"网易WDF动画",0x2A092BE6))
  :添加元素("tg",资源:载入('JM.FT',"网易WDF动画",0x2BF201B4))
  :添加元素("pt",资源:载入('JM.FT',"网易WDF动画",0x4100814A))
  :添加元素("df",资源:载入('JM.FT',"网易WDF动画",0x46C2DDA3))
  :添加元素("dq",资源:载入('JM.FT',"网易WDF动画",0x65C5B7EE))
  :添加元素("fc",资源:载入('JM.FT',"网易WDF动画",0x81B9B7F2))
  :添加元素("GM@@",资源:载入('JM.FT',"网易WDF动画",0xE8897A81))
  :添加元素("cw",资源:载入('JM.FT',"网易WDF动画",0xCD23D726))
  :添加元素("传音@@",资源:载入('JM.FT',"网易WDF动画",0xC6566132))
  :添加元素("拍卖@@",资源:载入('JM.FT',"网易WDF动画",0xC363C1CC))
  :添加元素("女儿村@@",资源:载入('JM.FT',"网易WDF动画",0xB3296C64))
  :添加元素("bp",资源:载入('JM.FT',"网易WDF动画",0xAD9D6490))
  :添加元素("mw",资源:载入('JM.FT',"网易WDF动画",0xADE6DAA4))
  :添加元素("st",资源:载入('JM.FT',"网易WDF动画",0xA5F25FB3))


  self.丰富文本外框 =  require("script/系统类/丰富文本")(250,h)
  :添加元素("xt",资源:载入('JM.FT',"网易WDF动画",0x43700E25))
  :添加元素("sj",资源:载入('JM.FT',"网易WDF动画",0x1B1DCE56))
  :添加元素("私聊@@",资源:载入('JM.FT',"网易WDF动画",0xF9ADC3DA))
  :添加元素("dw",资源:载入('JM.FT',"网易WDF动画",0xF9858C95))
  :添加元素("dy",资源:载入('JM.FT',"网易WDF动画",0xFC41B9B4))
  :添加元素("ps",资源:载入('JM.FT',"网易WDF动画",0xF0F8CF29))
  :添加元素("hs",资源:载入('JM.FT',"网易WDF动画",0x0902DAF6))
  :添加元素("lg",资源:载入('JM.FT',"网易WDF动画",0x212E3A85))
  :添加元素("wz",资源:载入('JM.FT',"网易WDF动画",0x2535CF6D))
  :添加元素("活动@@",资源:载入('JM.FT',"网易WDF动画",0x285527E7))
  :添加元素("夫妻@@",资源:载入('JM.FT',"网易WDF动画",0x29F78369))
  :添加元素("经济@@",资源:载入('JM.FT',"网易WDF动画",0x2A092BE6))
  :添加元素("tg",资源:载入('JM.FT',"网易WDF动画",0x2BF201B4))
  :添加元素("pt",资源:载入('JM.FT',"网易WDF动画",0x4100814A))
  :添加元素("df",资源:载入('JM.FT',"网易WDF动画",0x46C2DDA3))
  :添加元素("dq",资源:载入('JM.FT',"网易WDF动画",0x65C5B7EE))
  :添加元素("fc",资源:载入('JM.FT',"网易WDF动画",0x81B9B7F2))
  :添加元素("GM@@",资源:载入('JM.FT',"网易WDF动画",0xE8897A81))
  :添加元素("cw",资源:载入('JM.FT',"网易WDF动画",0xCD23D726))
  :添加元素("传音@@",资源:载入('JM.FT',"网易WDF动画",0xC6566132))
  :添加元素("拍卖@@",资源:载入('JM.FT',"网易WDF动画",0xC363C1CC))
  :添加元素("女儿村@@",资源:载入('JM.FT',"网易WDF动画",0xB3296C64))
  :添加元素("bp",资源:载入('JM.FT',"网易WDF动画",0xAD9D6490))
  :添加元素("mw",资源:载入('JM.FT',"网易WDF动画",0xADE6DAA4))
  :添加元素("st",资源:载入('JM.FT',"网易WDF动画",0xA5F25FB3))

  for n=0,119 do
    self.丰富文本:添加元素(n,根.包子表情动画[n])
    self.丰富文本外框:添加元素(n,根.包子表情动画[n])
  end
  self.背景 = 根._自适应.创建(71,1,125,23,3,9)
  self.精灵组 = {
    [1] = 资源:载入("Dat/Picture/xx/上边.png","图片"),
    [2] = 资源:载入("Dat/Picture/xx/下边.png","图片"),
    [3] = 资源:载入("Dat/Picture/xx/左边.png","图片"),
    [4] = 资源:载入("Dat/Picture/xx/右边.png","图片"),
    [5] = 资源:载入("Dat/Picture/xx/左上.png","图片"),
    [6] = 资源:载入("Dat/Picture/xx/左下.png","图片"),
    [7] = 资源:载入("Dat/Picture/xx/右上.png","图片"),
    [8] = 资源:载入("Dat/Picture/xx/右下.png","图片"),
    [9] = 资源:载入("Dat/Picture/xx/填充.png","图片"),
  }

  self.频道背景 = 资源:载入('JM.FT',"网易WDF动画",0xB39D470E)
  self.输入背景 = 资源:载入('JM.FT',"网易WDF动画",0x35452CAB) --39D3BD99 4BC54173
  self.表情开关 = 资源:载入('JM.FT',"网易WDF动画",0x590CAA9B)
  self.表情开关.当前帧 = 2
  self.表情开关:更新纹理()


  self.按钮_下 = 按钮(资源:载入('JM.FT',"网易WDF动画",0xF21AD59C),0,0,1,true)
  self.按钮_左拉 = 按钮(资源:载入('JM.FT',"网易WDF动画",0x5A8515D4),0,0,1,true)
  self.按钮_上拉 = 按钮(资源:载入('JM.FT',"网易WDF动画",0x2544285A),0,0,1,true)
  self.按钮_下拉 = 按钮(资源:载入('JM.FT',"网易WDF动画",0xA0617E8C),0,0,1,true)
  self.按钮_清屏 = 按钮(资源:载入('JM.FT',"网易WDF动画",0x2B24A44E),0,0,1,true)
  self.按钮_禁止 = 按钮(资源:载入('JM.FT',"网易WDF动画",0x1122D737),0,0,1,true)
  self.按钮_锁定 = 按钮(资源:载入('JM.FT',"网易WDF动画",0x020FDFE9),0,0,1,true)
  self.按钮_移动 = 按钮(资源:载入('JM.FT',"网易WDF动画",0x32BE710D),0,0,1,true,nil,true)
  self.按钮_查询 = 按钮(资源:载入('JM.FT',"网易WDF动画",0x1AA0EBD4),0,0,1,true)
  self.按钮_拉伸 = 按钮(资源:载入('JM.FT',"网易WDF动画",0xD209A05E),0,0,1,true,nil,true)
  self.按钮_拉伸.确定按下 = false
  self.按钮_移动.确定按下 = false
  self.按钮_颜色框 = 按钮(资源:载入('JM.FT',"网易WDF动画",0x9D123E79),0,0,1,true)
  self.外部背景 = 资源:载入("Dat/pic/wb.png","图片")
  self.控件类 = require("ggeui/加载类")()
  local 总控件 = self.控件类:创建控件('创建控件')
  总控件:置可视(true,true)
  self.输入 = 总控件:创建输入("创建输入",45,581,368,14,4294967295)
  self.输入:置可视(true,true)
  self.输入:置限制字数(120)

  self.隐藏 = false
  self.移动 = false
  self.可移动 = false
  self.可拉伸 = false
  self.禁止 = false
  self.计时 = 0
  self.颜色开始 = false
  self.表情开始 = false
  self.外部聊天 = false
  self.颜色精灵 = require("gge精灵类")(0,0,0,12,12)
  self.颜色表 = {{"#R/",4294901760,"红色"},{"#C/",0xFFFF9932,"橙色"},{"#Y/",0xFFFFFF00,"黄色"},{"#G/",0xFF00FF00,"绿色"},{"#P/",0xFF00FFFF,"青色"},{"#B/",0xFF03A89E,"蓝色"},{"#F/",0xFFFF00FF,"紫色"},{"#W/",0xFFFFFFFF,"白色"}}
  tp = 根
  self.频道显示=false
  self.频道数量=11
  self.当前频道=1
  self.频道按钮={
  [1]=按钮(资源:载入('JM.FT',"网易WDF动画",0x3EFEA3B2),0,0,1),---当前
  [2]=按钮(资源:载入('JM.FT',"网易WDF动画",0x177C94C8),0,0,1), --队伍
  [3]=按钮(资源:载入('JM.FT',"网易WDF动画",0x53B4E145),0,0,1), --世界
  [6]=按钮(资源:载入('JM.FT',"网易WDF动画",0x1346424F),0,0,1),  --帮派
  [5]=按钮(资源:载入('JM.FT',"网易WDF动画",0xEB0A7DDA),0,0,1), --传闻
  [4]=按钮(资源:载入('JM.FT',"网易WDF动画",0x043A27A6),0,0,1),  --门派
  [7]=按钮(资源:载入('JM.FT',"网易WDF动画",0x089F4E06),0,0,1),  --活动
  [8]=按钮(资源:载入('JM.FT',"网易WDF动画",0x1961D39F),0,0,1),    --交易
  [9]=按钮(资源:载入('JM.FT',"网易WDF动画",0x1FF1384F),0,0,1),    --夫妻
  [10]=按钮(资源:载入('JM.FT',"网易WDF动画",0x9FE6A010),0,0,1),   --团队
  [11]=按钮(资源:载入('JM.FT',"网易WDF动画",0x74158BD0),0,0,1)     --私聊

    }
    self.文本记录={}
  self.文本选中=0
end

function 系统类_消息框:添加文本(文本,频道)
  if self.禁止 then
    return
  end

    self.丰富文本:添加文本(文本)
    self.丰富文本外框:添加文本(文本)

end

function 系统类_消息框:清空内容()
  self.丰富文本:清空()
  self.丰富文本外框:清空()
end

function 系统类_消息框:取高度()
  return h
end

function 系统类_消息框:界面重叠()
  if self.输入背景:是否选中(鼠标.x, 鼠标.y) then
    return true
  end
    for n=1,self.频道数量 do
       if self.频道按钮[n]:是否选中(鼠标.x, 鼠标.y) then
        return true
      end
    end
  if self.按钮_下:是否选中(鼠标.x, 鼠标.y) then return true end
  if self.按钮_左拉:是否选中(鼠标.x, 鼠标.y) then return true end
  if self.按钮_上拉:是否选中(鼠标.x, 鼠标.y) then return true end
  if self.按钮_下拉:是否选中(鼠标.x, 鼠标.y) then return true end
  if self.按钮_清屏:是否选中(鼠标.x, 鼠标.y) then return true end
  if self.按钮_禁止:是否选中(鼠标.x, 鼠标.y) then return true end
  if self.按钮_锁定:是否选中(鼠标.x, 鼠标.y) then return true end
  if self.按钮_移动:是否选中(鼠标.x, 鼠标.y) then return true end
  if self.按钮_查询:是否选中(鼠标.x, 鼠标.y) then return true end
  if self.按钮_拉伸:是否选中(鼠标.x, 鼠标.y) then return true end
  if self.表情开关:是否选中(鼠标.x, 鼠标.y) then return true end
  return false
end

function 系统类_消息框:按钮选中(x, y)

    return  false
end


function 系统类_消息框:打开聊天窗口( ... )
    self.外部聊天 = self.外部聊天 == false
    if self.外部聊天 then
      -- 引擎.外部 = require("script/系统类/外部聊天框")(tp)
      引擎.child:open()
      self.丰富文本外框:置宽度(260)
      self.丰富文本外框:置高度(580)
      if self.丰富文本外框.滚动值 > 0 then
        self.丰富文本外框:滚动(-self.丰富文本外框.滚动值)
      end
      if self.丰富文本外框.滚动值 < #self.丰富文本外框.显示表 - floor(h/25) then
        self.丰富文本外框:滚动(self.丰富文本外框.滚动值)
      end
      self.按钮_左拉.外部按钮 = true
      self.按钮_上拉.外部按钮 = true
      self.按钮_下拉.外部按钮 = true
      self.按钮_移动.外部按钮 = true
      self.按钮_查询.外部按钮 = true
      self.按钮_禁止.外部按钮 = true
      self.按钮_锁定.外部按钮 = true
      self.按钮_清屏.外部按钮 = true
      self.按钮_移动.确定按下 = nil
    end
end

function 系统类_消息框:显示(dt,mx,my)
  if not self.首次打开 then
    self.首次打开 = true
    self:打开聊天窗口()
  end
  self.可移动 = false
  self.可拉伸 = false
  self.控件类:更新(dt,mx,my)
  self.按钮_下:更新(mx,my)
  self.按钮_左拉:更新(mx,my)
  self.按钮_上拉:更新(mx,my)
  self.按钮_下拉:更新(mx,my)
  self.频道按钮[self.当前频道]:更新(mx,my)
  self.按钮_移动:更新(mx,my)
  self.按钮_查询:更新(mx,my)
  self.按钮_禁止:更新(mx,my)
  self.按钮_锁定:更新(mx,my)
  self.按钮_清屏:更新(mx,my)
  self.按钮_拉伸:更新(mx,my)
  self.按钮_颜色框:更新(mx,my)
   if   self.频道按钮[self.当前频道]:事件判断() and self.频道显示==false then
      self.频道显示=true
   end


  if self.按钮_下:事件判断() then
     self.隐藏 = not self.隐藏
  elseif self.按钮_左拉:事件判断() then
     self:打开聊天窗口()
  elseif self.按钮_下拉:事件判断() then
    if self.丰富文本.滚动值 > 0 then
      self.丰富文本:滚动(-1)
    end
  elseif self.按钮_上拉:事件判断() then
    if self.丰富文本.滚动值 < #self.丰富文本.显示表 - floor(h/25) then
      self.丰富文本:滚动(1)
    end
  elseif self.按钮_禁止:事件判断() then
    self.禁止 = self.禁止 == false
  elseif self.按钮_清屏:事件判断() then
    self:清空内容()
  elseif self.按钮_颜色框:事件判断() then
    self.颜色开始 = self.颜色开始 == false
  end
  if not self.外部聊天 then
    -- 窗口拉伸
    bw1:置坐标(x,y-22)
    if (bw1:检查点(mx,my) or self.按钮_拉伸.确定按下) and not tp.选中UI then
      tp.按钮焦点 = true
      self.可拉伸 = true
    end
    if mousea(0) and self.可拉伸 then
      yyy = my - y
        self.移动 = true
    elseif mouseb(0) or tp.隐藏UI or tp.消息栏焦点 then
      self.移动 = false
    end
    if self.移动 and self.可拉伸 then
        local ys = y
      local lsy = my - yyy
      local lsh = h + (ys-lsy)
      local pd = (y - ys) > 0
      if lsh < 127 - 32 then
        lsh = 127 - 32
      elseif lsh > 291 then
        lsh = 291
      end
      h = lsh
      y = y1-h+127 - 32
      self.丰富文本:置高度(h)
      if #self.丰富文本.显示表 - floor(h/25) >= self.丰富文本.滚动值 and pd then
        self.丰富文本:滚动(-1)
      end
      tp.选中UI = true
    end
    -- 窗口移动
    bw:置坐标(x+82,y+90+(h-97))
    if (bw:检查点(mx,my) or self.按钮_移动.确定按下) and not tp.选中UI then
      tp.按钮焦点 = true
      self.可移动 = true
    end
    if mousea(0) and self.可移动 then
        xx = mx - x
        yy = my - y
        self.移动 = true
    elseif mouseb(0) or tp.隐藏UI or tp.消息栏焦点 then
      self.移动 = false
    end
    if self.移动 and self.可移动 then
      x = mx - xx
      y = my - yy
      y1 = y+h-127 + 32
      tp.选中UI = true
    end
    --
    self.精灵组[5]:显示 (x, y)
    self.精灵组[3]:置区域 (0, 0,  self.精灵组[3]:取宽度 (), h)
    self.精灵组[3]:显示 (x, y +  self.精灵组[5]:取高度 ())
    self.精灵组[6]:显示 (x, y +  self.精灵组[5]:取高度 () + h)
    self.精灵组[1]:置区域 (0, 0, w,  self.精灵组[1]:取高度 ())
    self.精灵组[1]:显示 (x +  self.精灵组[5]:取宽度 (), y)
    self.精灵组[2]:置区域 (0, 0, w,  self.精灵组[2]:取高度 ())
    self.精灵组[2]:显示 (x +  self.精灵组[6]:取宽度(), y +  self.精灵组[5]:取高度() + h)
    self.精灵组[7]:显示 (x +  self.精灵组[5]:取宽度 () + w, y)
    self.精灵组[4]:置区域 (0, 0,  self.精灵组[4]:取宽度 (), h)
    self.精灵组[4]:显示 (x +  self.精灵组[5]:取宽度 () + w, y +  self.精灵组[7]:取高度 ())
    self.精灵组[8]:显示 (x +  self.精灵组[5]:取宽度 () + w, y +  self.精灵组[5]:取高度 () +h)
    self.精灵组[9]:置区域 (0, 0, w, h)
    self.精灵组[9]:显示 (x +  self.精灵组[3]:取宽度 (), y +  self.精灵组[5]:取高度 ())
    self.丰富文本:显示(x + 4,y+2)
    self.按钮_拉伸:显示(x,y-22,true)
    local x2 = x + 32
    self.按钮_左拉:显示(x2 + 13,y + 90+(h-97),true)
    self.按钮_上拉:显示(x2 + 36,y + 90+(h-97),true)
    self.按钮_下拉:显示(x2 + 59,y + 90+(h-97),true)
    self.按钮_移动:显示(x2 + 83,y + 90+(h-97),true)
    self.按钮_查询:显示(x2 + 106,y + 90+(h-97),true)
    self.按钮_禁止:显示(x2 + 129,y + 90+(h-97),true)
    self.按钮_锁定:显示(x2 + 153,y + 90+(h-97),true)
    self.按钮_清屏:显示(x2 + 175,y + 90+(h-97),true)
  end
  self.输入背景:显示(39,577)
  if self.输入背景:是否选中(mx,my) and not tp.选中UI then
    tp.按钮焦点 = true
  end
  self.控件类:显示(mx,my)
  self.频道按钮[self.当前频道]:显示(0,577)
  self.频道背景:显示(0,568)
  self.按钮_颜色框:显示(415,577,true)
  self.表情开关:显示(425,598)
  if  keyb(KEY.ENTER) then
    -- 发送消息
    if self.输入:取文本() == "" then
      tp.提示:写入("#Y/温馨提示：你还未输入内容")
    else
         self.发送信息={内容=self.输入:取文本(),参数=self.当前频道}
        客户端:发送数据(self.当前频道,1,12,self.输入:取文本(),1)
    self.文本记录[#self.文本记录+1]=self.输入:取文本("")
         if #self.文本记录>10 then
         table.remove(self.文本记录,1)
         end
        self.文本选中=#self.文本记录
        self.输入:置文本("")
    end
  end
   if 引擎.按键弹起(0x26) then
    if  self.文本选中==0 then
    elseif self.文本记录[self.文本选中]~=nil then
    self.输入:置文本(self.文本记录[self.文本选中])
    self.文本选中=self.文本选中-1
    end
    elseif 引擎.按键弹起(0x28) then
    if self.文本选中==#self.文本记录 or self.文本选中==0 then
    else
    self.输入:置文本(self.文本记录[self.文本选中])
    self.文本选中=self.文本选中+1
    end
   end
  bw3:置坐标(429,571)
  if bw3:检查点(mx,my) and not tp.选中UI then
    self.表情开关:更新(dt)
    tp.按钮焦点 = true
    if mousea(0) then
      tp.窗口.消息框窗口:打开()
    end
  else
    if self.表情开关.当前帧 ~= 2 then
      self.表情开关.当前帧 = 2
      self.表情开关:更新纹理()
    end
  end
  if self.颜色开始 then
    self.背景:显示(367,546)
    for n=1,8 do
      self.颜色精灵:置颜色(self.颜色表[n][2])
      bw2:置坐标(355+n*15,552)
      self.颜色精灵:显示(355+n*15,552)
      if bw2:检查点(mx,my) and not tp.选中UI then
        tp.提示:自定义(mx+50,my-50,format("#W/%s",self.颜色表[n][3]))
        tp.按钮焦点 = true
        if mousea(0) then
           self.输入:添加文本(self.颜色表[n][1])
           self.颜色开始 = false
           tp.下一次确定 = true
           break
        end
      end
    end
  end
      if self.频道显示 then
      for n=1,self.频道数量 do
         self.频道按钮[n]:显示(0,577-n*25)
         self.频道按钮[n]:更新(mx,my)
          if self.频道按钮[n]:事件判断()  then
             self.当前频道=n
             self.频道显示=false
         end
         end
     end
  if tp.下一次确定 then
    self.计时 = self.计时 + 1
    if self.计时 == 10 then
      self.计时 = 0
      tp.下一次确定 = false
    end
  end

  if 引擎.按键按住(KEY.ALT) and 引擎.按键按下(KEY.MINUS) then
      tp.窗口.消息框窗口:打开()
  end
end


function 系统类_消息框:按钮选中(x, y)

    return  false
end


return 系统类_消息框



